package cn.ly.design.action.agent;

/**
 * 用访问起去做计算，不同的访问器得到不同的结果，但是DataBean本省不变，也不做任何计算
 * 把数据  和  算法分开，不同的计算方式得到不同的结果，但是数据本省不用动。
 * @author liuyu
 *
 */

public class VisitorTest {
	public static void main(String[] args) {
		DataBean d = new DataBean(250,250);
		Visitor v = new PlusVisitor();
		d.accept(v);
	}
}

interface Visitor{
	void visit(DataBean d);
}

class PlusVisitor implements Visitor{
	@Override
	public void visit(DataBean d) {
		int result = d.getA() + d.getB();
		System.out.println("PlusVisitor result : " + result);
	}
}

class MultiplyVisitor implements Visitor{

	@Override
	public void visit(DataBean d) {
		int result = d.getA() * d.getB();
		System.out.println("MultiplyVisitor result : " + result);
	}
	
}

class DataBean{
	private int a;
	private int b;
	public DataBean(int a,int b){
		this.a = a;
		this.b = b;
	}
	public void accept(Visitor v){//用访问起去做计算，不同的访问器得到不同的结果，但是DataBean本省不变，也不做任何计算
		v.visit(this);
	}
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
}